package com.gxl.butt.utils;

import org.apache.commons.lang.StringUtils;

import javax.servlet.http.HttpServletRequest;

import static com.gxl.butt.value.StaticValue.REG_IP;

/**
 * Created by guoxiaolin on 2018/7/16.
 */
public class IPUtil {


    /**
     * 多次反向代理后会有多个ip值，第一个ip才是真实ip
     * @param request
     * @return
     */
    public static String getIp(HttpServletRequest request) {
        String ip = request.getHeader("X-Forwarded-For");
        if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
            //多次反向代理后会有多个ip值，第一个ip才是真实ip
            int index = ip.indexOf(",");
            if(index != -1){
                return ip.substring(0,index);
            }else{
                return ip;
            }
        }
        ip = request.getHeader("X-Real-IP");
        if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
            return ip;
        }
        return request.getRemoteAddr();
    }

    /**
     * 判断含端口号的IP地址是否合法
     * */
    public static boolean isIp(String text) {
        if (text != null && !text.isEmpty()) {
            // 定义正则表达式
            String regex = REG_IP;
            // 判断ip地址是否与正则表达式匹配
            if (text.matches(regex)) {
                // 返回判断信息
                return true;
            } else {
                // 返回判断信息
                return false;
            }
        }
        return false;
    }

    /**
     * 判断含端口号的IP地址是否合法
     * */
    public static boolean isIpPort(String text) {
        if (text != null && !text.isEmpty()) {
            // 定义正则表达式
            String regex = REG_IP;
            // 判断ip地址是否与正则表达式匹配
            if (text.matches(regex)) {
                // 返回判断信息
                return true;
            } else {
                // 返回判断信息
                return false;
            }
        }
        return false;
    }

}
